Today's information technology professionals often use data retrieval systems having an n-tier, such as a three-tiered, architecture. By separating the different tiers, each tier can be managed, upgraded, and used independently of each other. A typical three-tier data retrieval system may include a front tier, a middle tier, and a back tier. The front tier typically interfaces to a user and can receive and/or generate queries for data. The middle tier typically processes queries received from the front tier and translates them into a form that the back tier can process. The back tier typically consists of some combination of database servers that respond to data operations such as queries or stored procedures, and web services that respond to web service operations. In particular, the middle tier typically translates queries received from the front tier into database or web service operations (collectively referred to herein as “data operations”) that are executed by the back tier to obtain data. The middle tier then sends the obtained data back to the front tier. The middle tier thus interfaces with the front tier, e.g., a client computer, and the back tier, e.g., one or more database servers or web services.
However, typical approaches used by the middle tier to translate queries received from the front tier into data operations that can be executed by the back tier are somewhat cumbersome. A typical translation technique may only use one-to-one matching of front-tier queries to data operations. For example, a typical approach may directly translate one front-tier query to one data operation. As a result, the front-tier queries can have little, if any, variation, thus limiting their functionality and usefulness. Furthermore, these typical approaches require that the front tier present queries using a limited and rigid syntax that can be easily translated by the middle tier using the one-to-one mapping.
As a result, typical approaches may not be able to compensate for any variations in the front tier query. In fact, these approaches limit the capability of the front tier to compose queries that have any variations. Even approaches that attempt to give the front tier more flexibility in composing queries still only use limited and inflexible mappings between queries and data operations.